| 
ROCKWELL R6500 MICROCOMPUTER SYSTEMTIM MANUAL
                                                   JUNE, 1977
                                                                DOC. NO. 29650N32
                                                    REVISION: 0TIM
TERMINAL INTERFACE MONITOR
MANUALABSTRACT | This document describes an assembler program for the Rockwell R65XX
family of CPUs. This program, called "Terminal Interface Monitor (TIM),"
is contained on an R6530-004 ROM which is designed to interfacewith a
TTY1 EIA terminal. The document also details configuration of the system
needed and its operation. | 
   Rockwell International| 
© Rockwell International Corporation, 1977
All Rights Reserved
Print in U.S.A. |     $2Rockwell Microelectronic Devices
P.O. Box 3669
Anaheim, CA 92803
 | 
 
 R6500 MICROCOMPUTER SYSTEM MONITOR SUPPORTING
DOCUMENTATIONDoc. No.                            Title
         29650N30         R6500 Microcomputer System Programming Manual
         29650N31         R6500 Microcomputer System Hardware Manual
         29650N50         R6500 Microcomputer System Instruction Set Summary   SALES OFFICES  
 TABLE OF CONTENTSPage
CHAPTER 1   INTRODUCTION .........................................  1-1
CHAPTER 2   SYSTEM CONFIGURATION .................................  2-1
CHAPTER 3   OPERATIONAL FEATURES OF TIM ..........................  3-1
            A. TIM Commands   ....................................  3-1
            B. TIM Interrupt and Breakpoint ......................  3-3
            C. TIM Monitor Calls and Special Locations ...........  3-4
            D. TIM Memory Usage ..................................  3-5
CHAPTER 4   TIM CHECKOUT PROCEDURE ...............................  4-1
APPENDIX A - MEMORY ADDRESS TEST  ................................  A-1
APPENDIX B - TIM PROGRAM LISTINGS ................................  B-1
iiiiv
 
 CHAPTER 1INTRODUCTIONTIM is the Terminal Interface Monitor program for Rockwell's R65XX-series
microprocessors for the R6500 Microcomputer System.  TIM is supplied in read-
only memory (ROM) as part of the R6530-004 multifunction chip.  Because the
TIM code is nonvolatile, it is available at system power-on and cannot be
destroyed inadvertently by user programs.  Furthermore, the user is free to
use only those TIM capabilities which he needs for a particular program.  Both
interrupt types, interrupt request (IRQ) and nonmaskable interrupt (NMI) may
be set to transfer control to TIM or directly to the user's program.
     TIM communicates with the user via a serial full-duplex port (using ASCII
codes) and automatically adjusts to the speed of the user's terminal.  Any
speed (up to 300 Baud)--even nonstandard ones--can be accommodated.  If the
user 5 terminal has a long carriage return time, TIM can be set to perform
the proper delay.  Commands typed at the terminal can direct TIM to start a
program, display or alter registers and memory locations, set breakpoints,
and load or punch programs.  If available in the system configuration, a
high-speed paper tape reader may be used to load programs through a parallel
port on the R6530-004 chip.  Programs may be punched in either of two formats--
hexadecimal (assembler output) or BNPF (which is used for programming read-only
memories).  On loading or modifying memory, TIM performs automatic read-after-
write verification to ensure that addresses memory exists, is read/write type,
and is responding correctly.  Operator errors and certain hardware failures
may thus be detected using TIM.
     TIM also provides several subroutines which may be called by user pro-
grams.  These include reading and writing characters on the terminal, typing a
byte in hexadecimal, reading from high-speed paper tape, and typing a carriage-
return, line-feed sequence with proper delay for the carriage of the terminal
being used.  Program tapes loaded by TIM may also specify a start address so
that programs may be started with a minimum of operator action.
1-11-2
 
 CHAPTER 2SYSTEM CONFIGURATIONSince TIM is a "program" resident in the R6530-004 it must be properly
configured in a proper system environment.
     Figure 2-1 represents a block diagram of a minimum system utilizing the
TIM program.  The R6502 is the controlling microprocessor with two pages of
memory (pages 0 and 1) representing the minimum RAM requirement.  These
devices, as well as a representative schematic for the TTY, EIA interfaces,
are shown in Figure 2-2 which is a detailed system schematic utilizing the
R6530-004.  Note that the TIM function select equations are found on this
schematic.
2-1
  * Note that the TIM as sold consists only of    
  the R6530-004 component accompanied           
  by supporting information to build this system
Typical Minimum Configuration for "TIM" System
FIGURE 2-1
2-2 
  This figure is shown here at ¼ of it's quality but gives a good printout.
2-3 2-4
 
 CHAPTER 3OPERATIONAL FEATURES OF TIMA. TIM COMMANDS *Command                                      Description Set line speed.  After RESET, a carriage return is
-                        typed to allow TIM to measure the line speed.
.R                      Display user registers.  The format is:
                             PC P A X Y S.
                        where:
                             PC is the program counter
                             P  is the processor status
                             A  is the A (accumulator) register
                             X  is the X (index) register
                             Y  is the Y (index) register
                             S  is the stack pointer low byte (high byte is
                                always 01)
.G                      Go.  Begin execution at user PC location (see R command).
.M addr                 Memory examine.  TIM will display the eight bytes
                        beginning at address addr.
.: ADDR data            Alter registers or memory.  TIM allows the user to
                        alter registers (if R command precedes) or memory (if
                        M command precedes).  Values for registers or memory
                        locations which are not to be changed need not be typed.
                        These fields may be skipped by typing spaces instead of
                        data.  The remainder of the fields in a line may be left
                        unchanged by typing carriage return.  The : command may
                        be repeated to alter subsequent memory locations without
                        the necessity of typing intervening M commands.  Note
                        that TIM automatically types spaces to separate data
                        fields. * Characters typed by the user are underlined.  All other characters are typed 
  by the computer.
  means carriage-return.  The monitor types a period (.) as
  a prompting character.
3-1 .LH                    Load Hexadecimal.  TIM responds with carriage return,
                       line-feed and loads data in assembler output format
                       from the terminal or high-speed paper tape reader.  The
                       format is:
                            Zero or more leading characters except
                                 ";"  (usually blank leader)
                            Any number of records of the form:
                                  ;ccaaaadddd....ddssss
                            where:
                                 cc is the number of bytes in the record in hex.
                                 aaaa is the hex address to store the first
                                 byte of data.
                                 dddd....dd is the data (two hex digits per
                                 byte).
                                 ssss is the check-sum, which is the arithmetic
                                 sum, to 16 bits, of all the count, address and
                                 data bytes represented by the record.
                            A terminating record of zero length, either:
                                 ;00  or  ;
  Note that read-after-write and check-sum tests are per-
                        formed.  An error will result in a "?" being typed at
                        the point the error occurred.  Data from records with
                        bad checksums is deposited in memory as received, prior
                        to the error stop.
.H                      High-speed/low-speed reader switch.  This command
                        switches the load device from the user's terminal to the
                        high-speed reader or vice versa.
.WH addl addh  Write Hexadecimal.  An assembler-format tape is gener-
                        ated at the user's terminal.  Format is as described
                        above in the LH command description.  Note that the
                        address range must be specified with the lower address
                        first.  As in the Alter command, TIM types the space
                        between the address fields.
.WB addl addh  Write BNPF.  A BNPF format tape is generated at the
                        user 5 terminal.  Format is one or more records as
                        follows:
                             aaaa BddddddddF BddddddddF BddddddddF BddddddddF
                        where:
                             aaaa is the address of the first of the four bytes
                             specified in the record.  (Note:  BNPF conventions
                             require that the letter "B11 never occur in the
                             address field.  Blanks are substituted by TIM.)
3-2 B is the letter "B", meaning begin data.
                             dddddddd is eight data bits-P for logical true,
                             N for logical false.
                             F is the letter "F", meaning finish.
                        Note that the BNPF format is output as multiples of
                        four bytes.  Thus, a multiple of four bytes will always
                        be punched even if a non-multiple of four bytes is
                        specified.
                        Cancel Command.  while typing any command, its further
                        effect may normally be terminated by typing one or two
                        carriage returns, as required.  During alter (:),
                        carriage return means that no further bytes (or
                        registers) are to be altered.
 B. TIM INTERRUPT AND BREAKPOINTBRK
         The BRK instruction causes the CPU to interrupt execution, save PC
    and P registers on the stack, and branch through a vector at locations
    FFFE and FFFF.  TIM initializes this vector to point to itself on RESET.
    Unless the user modifies this vector, TIM will gain control when a BRK
    instruction is executed, print an asterisk  "*" and the registers (as in
    R command), and wait for user commands.  Note that after a BRK which
    vectors to TIM, the user's PC points to the byte following the BRK; how-
    ever, users who choose to handle BRK instructions themselves should note
    that BRK acts as a two-byte instruction, leaving the PC (on return via
    RTI) two bytes past the BRK instruction.
    IRQ
         Interrupt Request is also vectored through location FFFE.  The CPU
    traps (as with BRK) through this vector when IRQ goes low, provided
    interrupts are not inhibited.  Since this vector is the same as for BRK,
    TIM examines the BRK bit in the P register after this type of interrupt.
    If a BRK did not cause the interrupt, then TIM will pass control through
    the UINT vector.  Users should normally put the address of their interrupt
    service routine in the UINT vector location.  If an IRQ occurs and UINT
    has not been set by the user, TIM reports the unexpected interrupt in the
    same way as in NMI (see below).
3-3NMI
     Non-Maskable Interrupts vector through location FFFA.  TIM initializes
     this vector at RESET to point to itself.  If an NMI occurs, a pound-sign
     character (#) precedes the asterisk and CPU registers printout).  This
     action is the same for IRQ1s if the user has not set this vector to point
     to his own routine.
     RESET
     On RESET, TIM takes control, initializes itself and the system, sets defaults
     for interrupt vectors and waits for a carriage-return input from the user to
     determine terminal line speed.  After carriage-return is typed, control is
     passed to the user as in BRK.
 C.  TIM MONITOR CALLS AND SPECIAL LOCATIONSCall     Address          Action        Arg.   Result         Notes
JSR WRT      72C6     Type a character    A     None       A,X cleared
                                                           Y preserved
JSR RDT      72E9     Read a character    None  A          X cleared
                                                           Y not preserved
JSR CRLF     728A     Type CR-LF and      None  None       A, X cleared
                      delay                                Y preserved
JSR SPACE    7377     Type a space        None  None       A,X,Y preserved
                      character
JSR WROB     72B1     Type a byte in hex  A     None       A,X cleared
                                                           Y preserved
JSR RDHSR    733D     Read a character    None  X--char    Y preserved
                      from high-speed           read
                      paper tape reader         A--char
                                                trimmed
                                                to 7 bits
   Function     Locations                       Notes
Start Address   00F6,00F7    Set with hex tape on load
CR-LF Delay     00E3         Set on load or with user program (in bit times,
                             minimum of 1.  Zero means 256 bits-time delay).
UINT            FFF8         User IRQ vector
NMI Vector      FFFA         Hardware NMI vector
RESET Vector    FFFC         Hardware RESET vector
IRQ Vector      FFFE         Hardware IRQ vector
3-4
 D.	TIM MEMORY USAGETIM uses the top 2910 bytes of page zero (locations 00E3 through 00FF).
The user is advised to avoid these locations, except as noted above, if return
to TIM or use of TIM subroutines is required before RESETing the processor.
TIM also uses the hardware stack when it is in control.  Provided the user
does not alter the stack pointer during a break, and provided the stack does
not overflow, TIM will restore the stack to its original status before return-
ing to the user's program.  The user is advised to use page 1 (the stack page)
cautiously, leaving at least 2010 bytes for TIM use during a break or when
using other TIM functions.
3-53-6
 
 CHAPTER 4TIM CHECKOUT PROCEDUREThe following step-by-step procedure assumes the user has built the TIM
hardware system and is now ready to verify its functionality.
( )  	1.  Turn power on, or if the power is on, perform a RESET operation.  Type
a carriage-return on the terminal.  TIM should respond with:
              *  7052  30  18  FF  01  FF
(Exact values may vary, although the first and last values should be as shown.)
If no response or a garbled response occurs, RESET and try again.  In case of
continued trouble, refer to the diagnostic section of the Hardware Manual.
         The "*  7052  30  18  FF  01  FF" printout is TIM's standard break-
point message format.  It consists of an asterisk "*" to identify the break-
point printout, followed by the CPU register contents in this order:  PC, P,
A, X, Y, and S, i.e., Program Counter, Processor Status, Accumulator, X index,
Y index and Stack Pointer.  Note that all TIM inputs and outputs are in base 16
which is referred to as hexadecimal, or just hex.  In hexadecimal, the "digits"
are 0, 1, 2,..., A, B, C, D, E. F.  After printing the CPU registers, TIM is
ready to receive commands from you, the operator.  TIN indicates this "ready"
status by typing the prompting character "." on a new line.
( ) 	2.   TIM's response to RESET is to wait for a carriage-return and then
print the user 5 registers.  TIN uses this carriage-return character to measure
the terminal line speed.  If you have a settable-rate terminal, change the rate
(any speed between 10 and 30 cps will work) and repeat Step 1.  TIM should
respond at the new terminal speed.
( ) 	3.   The user1s CPU registers may also be displayed with the R command.
Type an R.  The monitor should respond as above, but without the asterisk.
Presence of the asterisk indicates that an interrupt or break instruction
caused the printout.
              .R  7052  30  18  FF  01  FF
4-1( )  4.  Displayed values may be modified using the Alter (:) command.  To
modify register contents, type a colon (:) followed by the new values.  For
example:
              .R  7052  30  18  FF  Ol  FE
              .:  0100  00  00  00  00  FE
              .R  0100  00  00  00  00  EF
Notice that TIM automatically types spaces to separate data fields.  (Note:
Characters typed by you, the user, are underlined in this document for clarity.
Everything else is typed by the computer.)  Examine your registers (R command)
to verify the changes.
         Memory may be examined and modified, as above, using the M and :
commands.  Try this:
          .M  0100  00  66  23  EE  01  A2  41  6E
The memory command (M) causes TIM to type the contents of the first eight bytes
of memory.  (Memory data will be random on startup.)  Alter and verify these
bytes using the Alter command, as above:
              .M  0100  00  66  23  EE  Ol  A2  41  6E
              .:  0100  00  01  02  03  04  05  06  07
         If only part of a line is to be altered, items to be left unchanged
can be skipped over by typing blanks, and carriage-return (
  ).   Try this:
              .M  0100  00  01  02  03  04  05  06  07
              .:  0100  FF      FF  FF  .M  0100  FF  01  FF  FF  04  05  06  07
( )  5.  Try to alter a location in TIM ROM:
              .M  7000  85  F9  A9  23  DO  58  A9  16
              .:  7000  00?
TIM verifies all changes to memory.  Since locations 7000 through 7007 are in
read-only memory, alteration is not possible.  TIM signals write failure with
a question mark.  Similarly, the monitor will notify you of an attempt to
alter a non-existent location:
              .M  9000  90  90  90  90  90  90  90  90
              .:  9000  00?
Note that attempts to read non-existent memory will normally yield the high-
order byte of the address read.
4-2 ( )  6.  There are three hardware facilities which may be used to stop a
running (or run-away) program without the program itself calling TIM.  These
are the hardware inputs RESET, IRQ, and NMIe  To test this feature enter the
following program at location 0000:
           location            contents              instruction
             0000                 4C               LOOP  JMP  LOOP
             0001                 00
             0002                 00
(Use the M and : commands.)
         Now, set the program counter (PC) to this location using the R and :
commands.  Finally, tell TIM to start executing your program using the Go (G)
command:
              .M  0000  FE  11  11  11  91  91  71  91
              .:  0000  4C  00  00
  .M  0000  4C  00  00  11  91  91  71  91
              .R  0000  30  00  00  00  FE
              .:  0000  .G
The computer should now be executing the program.  It will continue to run
until interrupted.  Using the interrupt request line (IRQ), interrupt the
processor.  It should respond with:
              *   0000  30  00  00  00  FE
Try the same experiment with non-maskable interrupt (NMI).  The result should
be the same except for a "#" character preceding, which identifies the NMI
printout.  Finally, try it with RESET.  RESET, however, forces a CPU branch
to TIM, losing the old PC and other register contents.  Thus NMI is the pre-
ferred means for manually interrupting program execution.  IRQ may also be
used unless it is required for other functions such as peripheral interrupts.
( )  7.  Use M and : to enter the following test program called CHSET because
it prints the character-set on the terminal.  Note that Alter (:) commands may
be repeated without intervening M commands to set sequential locations:
4-3 ;CHECKOUT PROGRAM -- PRINT THE CHARACTER SET NN USER TERMINAL
               CRLF   =$728A            ;ADDRESS OF  TIM  CRLF ROUTINE
               WRT    =$27C6            ;ADDRESS OF  TIM  WRITE ROUTINE
               ;
0000                  *=0               ;VARIABLE STORAGE IN PAGE ZERO
0000           CHAR   *=*+1             ;STORAGE FOR CHARACTER
0001                  *=$0100           ;PROGRAM STARTS ON PAGE ONE
               ;
0100 20 8A 72  CHSET  JRS CRLF          ;DO CARRIAGE RETURN & LINE FEED
0103 A9 20            LDA #$20          ;FIRST CHARACTER IS A SPACE
0105 85 CC            STA CHAR          ;INITIALIZE
               ;
0107 A5 00     LOOP   LDA CHAR          ;GET CHARACTER
0109 C9 60            CMP #$6C          ;CHECK FOR LIMIT
010B FO C8            BEQ DONE          ;DONE IF 60
               ;
010D 20 C6 72         JSR WRT           ;PRINT CHAR
0110 E6 00            INC CHAR          ;NEXT CHAR CODE
0112 4C 07 0l         JMP L00P          ;CONTINUE
0115 C0        DONE   BRK               ;STOP & RETURN TO TIM MONITOR
               ;
0116 4C 00 01         JUMP CHSET        ;DO IT AGAIN
             .M   0100  20  8D  72  20  EC  72  8D  26
             .:   0100  20  8A  72  A9  20  85  00  A5
             .:   0108  00  C9  60  F0  08  20  C6  72
             .:   0110  E6  00  4C  07  01  00  4C  00
             .:   0118  01
  Now run the program.  Do this by setting the PC to 0100 and using the
G command.  The listing should look like this:
.R  0000 30 00 00 00 FF
.:  0100  .G
!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
*  0116 33 60 00 00 FF
The program may be continued, causing it to execute again, by typing G:
.G
!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
*  0116 33 60 00 00 FF
.G
!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
*  0116 33 60 00 00 FF
.G
!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
*  0116 33 60 00 00 FF
4-4 The CHSET program uses two TIM monitor functions: CRLF is the TIM
function which causes a carriage-return and line-feed to be typed on the termi-
nal.  WRT is the routine which prints the character whose code is in the
A register at the time of the call.
( )  8.  Save the CHSET program on paper tape (if your terminal has a punch) as
follows:  First, punch some leader tape with the terminal in local mode.  Then
return to line mode and enter:
              .WH 0100 0118
  Turn the punch on after typing the second address, but before typing carriage-
return.  Then type carriage-return to punch the tape.  when punching stops,
turn the terminal back to local and type:
              ;00
and some blank trailer.  This is a zero-length record which terminates your
tape.  See Appendix B for more information on tape formats.
( )  9.  Try re-loading your program using the LH command:
              .LH
Now start the reader to load the program.  The tape will be read and printed
simultaneously.  Stop the tape when the end is reached.  (Before loading, you
may wish to destroy the program in memory to verify that loading from tape
actually works.)
( ) 10.  Use the M and : commands to load the following program:
4-5 
  .M  0100  20  8D  72  A9  20  85  00  A5
              .:  0100  20  8A  72  20  E9  72  85  00
              .:  0108  20  77  73  A9  08  85  01  A9
              .:  0110  30  06  00  B0  02  A9  31  20
              .:  0118  C6  72  C6  01  10  F1  4C  00
              .:  0120  01  The purpose of this program is to print the binary representation of
an ASCII input character on the terminal.  Run the program by starting it at
location 0100.  Try typing some characters:
              .R  0116  33  60  00  00  FF
              .:  0100  .G
              U  101010101
              B  101111011
              1  110011101
4-6 There is obviously something wrong with the program.  Bits which should
be printed as 1's are 0's and vice versa.  (Refer to your 6500 reference card
for character codes.)  Looking at the program, the problem is that the branch
after PBLOOP goes the wrong way!  It should be BCC, Branch if Carry Clear (or
alternatively, the 1 and 0 loads could be interchanged).  Thus, when a one-bit
is shifted out of the character, a one should be printede
         Patch the program and try again (the code for BCC is 90).
               .M   0113  B0  02  A9  31  20  C9  72  C6
               .:   0113  90
  .R   7052  31  FC  FF  0l  FF
               .:   0100  .G
               U  010101010
               B  010000100
               1  001100010
         There is, alas, still an error--one too many bits is being printed.
The cause of this is a little less obvious.  (Do you see it?)  To investigate
the problem, set a breakpoint at location 011E.  Do this by replacing the
instruction there with a BRK (code of 00).  Then run the program:
              .M   011E  4C  00  01  EF  4C  00  01  00
              .:   011E  00  .R   7052  31  FC  FF  01  FF
              .:   0100  .G
              U  010101010
               * 011F  B0  00  00  AA  FF
         Once the break has occurred, you are free to investigate the state of
the program using TIM.  In particular, check the value in location COUNT:
              .M   0000  00  FF  1B  2E  31  EA  F0  FA
Aha!  Although COUNT starts out with a value of 8, it is going one step too
far (FF is minus 1).  This is because the test instruction, BPL PBLOOP is test-
ing to see whether the count is greater than or equal to zero.  Replace it with
BNE (code D0), replace your breakpoint with the original contents at that loca-
tion, and try the program again.
4-7 .M  011C  10  Fl  00  00  0l  EF  4C
.:  011C  D0      4C
  .R  011F  B0  00  00  AA  FF
.:  0100  .G
U  01010101
B  01000010
l  100110001
I  01001001
W  01010111
O  01001111
R  01010010
K  01001011
S  01010011   ( ) 11.  Save the corrected program using the WH command.  Before punching the
terminating record (as above in step 8), turn off the punch and set the PC to
the start address of the program (0100).  Then punch locations 00F6 and 00F7
on the tape, then the terminator (;00), and finally, some trailer:
              .R   7052  30  37  FF  01  FF
              .:   0100
  .WH  00F6  00F7  ;0200F6000101A2
              .;00
The resulting tape can be loaded and then started as follows:
              .LH
                :
                : (program loads in)
                :
              .G
Locations 00F6 and 00F7 contain the starting address for programs.  You may
assemble and load your starting address into these locations to make tapes
which can be started with a minimum of operator action.  The carriage-return
delay time may also be set in this manner.  See Appendix B.
( ) 12.  It is also possible to punch BNPF-format tapes using TIM.  BNPF is the
format used by some ROM programmers.  The command is similar to that for writ-
ing hex tapes:
              .WB  0100  0127  This command would punch the corrected PBIN program in BNPF format.  Try punch-
ing a BNPF tape.  (Note that TIM will not load tapes in this format--use hex
format (WH) for saving programs for later loading into your 65XX.)
( ) 13.  If you have a high-speed paper tape reader attached to your 65xx sys-
tem, you can use it to load programs in hex format.  The H command switches the
load device to and from the high speed reader.  If you have a high-speed reader,
try loading a tape as follows:
              .H
              .LH
Note that control will not return to the user terminal until a terminator
record (;00) is read.
4-9 4-10
 
 APPENDIX AMEMORY ADDRESS TESTA-1
   
   
   
 APPENDIX BTIM PROGRAM LISTINGSB-1
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
 |